package Rbac.service.array;

import Rbac.domain.dto.BaseDto;
import Rbac.domain.entity.BaseEntity;
import Rbac.domain.vo.BaseVo;
import Rbac.domain.vo.Result;
import Rbac.service.IBaseService;

import java.util.Arrays;

/**
 * 业务层-基类
 */
abstract class BaseService<Entity extends BaseEntity, Dto extends BaseDto, Vo extends BaseVo>
        implements IBaseService<Entity, Dto>{
    static final int DATA_SIZE=100;
    Entity[] data;
    Vo[] temp;
    private int idCounter=1;
    @Override
    public boolean existsById(int id) {
        return id < 1 || id >= idCounter || data[id] == null;
    }
    @Override
    public Entity findById(int id) {
        if(existsById(id)){
            return data[id];
        }
        else {
            return null;
        }
    }
    abstract Vo convertToVo(Entity entity);
    public Result list() {
        int length=0;
        for (int i = 1; i < DATA_SIZE; i++) {
            if(data[i]!=null){
                temp[length++]=convertToVo(data[i]);
            }
        }
        return Result.success("查询成功！", Arrays.copyOf(temp,length));
    }
    abstract Entity createEntity(Dto dto, int id);
    public Result create(Dto dto) {
        if(idCounter>DATA_SIZE){
            return Result.failure("创建失败，超出数据存储容量！");
        }
        else {
            Entity entity=createEntity(dto, idCounter++);
            data[entity.getId()] = entity;
            return Result.success("创建成功！", null);
        }
    }
    abstract void updateEntity(Dto dto, Entity entity);
    public Result update(Dto dto, int id) {
        if(existsById(id)){
            return Result.failure("更新失败，部门不存在！");
        }
        Entity entity=data[id];
        updateEntity(dto,entity);
        return Result.success("更新成功！", null);
    }
}
